﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SqlDataAccess;

namespace QuanLyBanHang.HeThong
{
	public partial class F120_Danh_sach_nhom_nguoi_dung : Form
	{
		public F120_Danh_sach_nhom_nguoi_dung()
		{
			InitializeComponent();
			set_define_events();
		}

		#region Public Interfaces

		#endregion

		#region Members
		BKIQuanLyBanHangEntities db = new BKIQuanLyBanHangEntities();
		#endregion

		#region Private Methods
		private void set_define_events()
		{
			this.Load += F120_Danh_sach_nhom_nguoi_dung_Load;
			this.m_cmd_cap_nhat_nhom_nguoi_dung.Click += m_cmd_cap_nhat_nhom_nguoi_dung_Click;
            this.m_cmd_them_nhom_nguoi_dung.Click += m_cmd_them_nhom_nguoi_dung_Click;
			this.m_cmd_tim_kiem_nhom_nguoi_dung.Click += m_cmd_tim_kiem_Click;
			this.m_cmd_xoa_nhom_nguoi_dung.Click += m_cmd_xoa_Click;
			this.m_cmd_xoa_trang.Click += m_cmd_xoa_trang_Click;
			this.m_grv.CellClick += m_grv_CellClick;
		}
		private bool check_validate_data_is_ok()
		{
			if (string.IsNullOrWhiteSpace(m_txt_ten_nhom_nguoi_dung.Text))
			{
				MessageBox.Show("Bạn phải nhập Tên nhóm người dùng!", "Thông báo");
				m_txt_ten_nhom_nguoi_dung.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_ghi_chu.Text))
			{
				MessageBox.Show("Bạn phải nhập Ghi chú cho nhóm người dùng!", "Thông báo");
				m_txt_ghi_chu.Focus();
				return false;
			}
			return true;
		}
		private void load_data_to_grid()
		{
			var v_lst_nhom_nguoi_dung = db.HT_NHOM_NGUOI_DUNG
								.Where(x=>x.TEN_NHOM.Contains(m_txt_tim_kiem.Text.Trim())
									||x.GHI_CHU.Contains(m_txt_tim_kiem.Text.Trim())
									|| m_txt_tim_kiem.Text == "")
								.OrderBy(x => x.TEN_NHOM)
								.Select(x => new
								{
									ID = x.ID,
									TEN_NHOM = x.TEN_NHOM,
									GHI_CHU = x.GHI_CHU
								})
								.ToList();

			m_grv.DataSource = v_lst_nhom_nguoi_dung;
			m_grv.Columns[0].HeaderText = "ID";
			m_grv.Columns[0].Visible = false;
			m_grv.Columns[0].Width = 20;
			m_grv.Columns[1].HeaderText = "Tên nhóm";
			m_grv.Columns[1].Width = 200;
			m_grv.Columns[2].HeaderText = "Ghi chú";
			m_grv.Columns[2].Width = 300;
		}
		#endregion

		#region Events
        void m_cmd_xoa_trang_Click(object sender, EventArgs e)
		{
			try
			{
				m_txt_ten_nhom_nguoi_dung.Text = "";
				m_txt_ten_nhom_nguoi_dung.Focus();
				m_txt_ghi_chu.Text = "";
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        void m_cmd_xoa_Click(object sender, EventArgs e)
		{
			try
			{
				if (m_grv.CurrentRow == null)
				{
					MessageBox.Show("Bạn hãy chọn Nhóm người dùng để xoá!", "Thông báo!");
					return;
				}
				decimal id_nhom_nguoi_dung = (decimal)m_grv.CurrentRow.Cells[0].Value;
				var v_ht_nhom_nguoi_dung = db.HT_NHOM_NGUOI_DUNG
											.FirstOrDefault(x => x.ID == id_nhom_nguoi_dung);
				if (v_ht_nhom_nguoi_dung != null)
				{
					if (MessageBox.Show("Bạn có chắc chắn muốn xoá NHÓM NGƯỜI DÙNG này và các thông tin NGƯỜI SỬ DỤNG và THÔNG TIN PHÂN QUYỀN liên quan không?", "Cảnh báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
					{
						//Xoá dữ liệu bảng HT_PHAN_QUYEN_CHO_NHOM
						var v_lst_phan_quyen_cho_nhom = db.HT_PHAN_QUYEN_NHOM
										.Where(x => x.ID_NHOM_NGUOI_DUNG == id_nhom_nguoi_dung)
										.ToList();
						for (int i = 0; i < v_lst_phan_quyen_cho_nhom.Count; i++)
						{
							db.HT_PHAN_QUYEN_NHOM.Remove(v_lst_phan_quyen_cho_nhom[i]);
							db.SaveChanges();
						}
						//Xoá dữ liệu bảng HT_NHOM_NGUOI_DUNG
						db.HT_NHOM_NGUOI_DUNG.Remove(v_ht_nhom_nguoi_dung);
						db.SaveChanges();
						MessageBox.Show("Bạn đã xoá dữ liệu thành công!", "Thông báo");
						load_data_to_grid();
					}
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        void m_cmd_tim_kiem_Click(object sender, EventArgs e)
		{
			try
			{
				load_data_to_grid();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        void m_cmd_them_nhom_nguoi_dung_Click(object sender, EventArgs e)
		{
			try
			{
				if (check_validate_data_is_ok())
				{
					HT_NHOM_NGUOI_DUNG v_ht_nhom_nguoi_dung = new HT_NHOM_NGUOI_DUNG();
					v_ht_nhom_nguoi_dung.TEN_NHOM = m_txt_ten_nhom_nguoi_dung.Text.Trim();
					v_ht_nhom_nguoi_dung.GHI_CHU = m_txt_ghi_chu.Text.Trim();
					db.HT_NHOM_NGUOI_DUNG.Add(v_ht_nhom_nguoi_dung);
					m_cmd_xoa_trang_Click(null, null);
					db.SaveChanges();
					MessageBox.Show("Bạn đã thêm mới nhóm người dùng thành công!", "Thông báo");
					load_data_to_grid();
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_cmd_cap_nhat_nhom_nguoi_dung_Click(object sender, EventArgs e)
		{
			try
			{
				if (m_grv.CurrentRow == null) return;
				decimal id_nhom_nguoi_dung = (decimal)m_grv.CurrentRow.Cells[0].Value;
				var v_ht_nhom_nguoi_dung = db.HT_NHOM_NGUOI_DUNG.FirstOrDefault(x => x.ID == id_nhom_nguoi_dung);
				if (v_ht_nhom_nguoi_dung != null)
				{
					if (check_validate_data_is_ok())
					{
						v_ht_nhom_nguoi_dung.TEN_NHOM = m_txt_ten_nhom_nguoi_dung.Text.Trim();
						v_ht_nhom_nguoi_dung.GHI_CHU = m_txt_ghi_chu.Text.Trim();
						db.SaveChanges();
						m_cmd_xoa_trang_Click(null, null);
						MessageBox.Show("Bạn đã cập nhật thông tin thành công!", "Thông báo");
						load_data_to_grid();
					}
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void F120_Danh_sach_nhom_nguoi_dung_Load(object sender, EventArgs e)
		{
			try
			{
				load_data_to_grid();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_grv_CellClick(object sender, DataGridViewCellEventArgs e)
		{
			try
			{
				if (m_grv.CurrentRow == null) return;
				decimal id_nhom_nguoi_dung = (decimal)m_grv.CurrentRow.Cells[0].Value;
				var v_ht_nhom_nguoi_dung = db.HT_NHOM_NGUOI_DUNG.FirstOrDefault(x => x.ID == id_nhom_nguoi_dung);
				if (v_ht_nhom_nguoi_dung != null)
				{
					m_txt_ten_nhom_nguoi_dung.Text = v_ht_nhom_nguoi_dung.TEN_NHOM;
					m_txt_ghi_chu.Text = v_ht_nhom_nguoi_dung.GHI_CHU;
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        private void m_cmd_quay_lai_Click(object sender, EventArgs e)
        {
            try
            {
                this.Close();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
		#endregion
	}
}
